/**
 * 
 */
package br.com.consultsystems.negocio.impl.financeiro;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import br.com.consultsystems.dominio.financeiro.Titulo;
import br.com.consultsystems.dominio.tipos.StatusFinanceiro;
import br.com.consultsystems.negocio.spec.financeiro.TituloNegocio;
import br.com.consultsystems.persistencia.spec.financeiro.TituloPersistencia;

/**
 * @author Moralles
 * 
 */
@Stateless(name = "tituloNegocio")
public class TituloNegocioImpl implements TituloNegocio {

	@EJB
	private TituloPersistencia tituloPersistencia;

	@Override
	public Titulo merge(Titulo titulo) throws Exception {

		/** Validação de número, parcela e quantidade */

		/* numero: se vier nulo, pega do próximo da tabela */
		if (titulo.getNumero() == null) {
			titulo.setNumero(tituloPersistencia.retrieveProximoNumero());
		}

		/* quantidade: se vier nul, considerar o valor da parcela */
		if (titulo.getQuantidade() == null || titulo.getQuantidade() <= 0) {
			titulo.setQuantidade((short) 1);
		}

		/* parcela: se vier nulo ou negativo, considerar 1 */
		if (titulo.getParcela() == null || titulo.getParcela() <= 0) {
			titulo.setParcela((short) 1);
		} else if (titulo.getParcela() > titulo.getQuantidade()) {
			titulo.setParcela(titulo.getQuantidade());
		}

		if (titulo.getId() == null) {
			titulo.setStatus(StatusFinanceiro.ABERTO);
		}

		return tituloPersistencia.merge(titulo);
	}

	@Override
	public Titulo retrieve(Long id) throws Exception {
		return null;
	}

	@Override
	public void remove(Titulo t) throws Exception {
		t = this.merge(t);
		tituloPersistencia.remove(t);
	}

	@Override
	public void refresh(Titulo t) throws Exception {
		tituloPersistencia.refresh(t);
	}

	@Override
	public List<Titulo> retrieveAll() throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Titulo> retrieveByFilter(String nomeCondominio)
			throws Exception {
		return tituloPersistencia.retrieveByFilter(nomeCondominio);
	}

	@Override
	public List<Titulo> retrieveByCondominio(Long idCondominio)
			throws Exception {
		return tituloPersistencia.retrieveByCondominio(idCondominio);
	}

}
